﻿using System.Collections.Generic;
using System.Windows.Forms;
using BadgeManager.Controller;
using BadgeManager.Model;

namespace Badge_Manager.View
{
    public partial class frmAggiungiTessera : Form
    {
        private Tessera tessera;
        private StatoForm status;
        frmElencoTessere elenco;

        public frmAggiungiTessera(StatoForm stato, Tessera tessera = null, frmElencoTessere elenco = null)
        {
            InitializeComponent();
            this.tessera = tessera;
            SettaStato(stato);
            status = stato;
            this.elenco = elenco;
        }

        #region Eventi

        private void btnSalva_Click(object sender, System.EventArgs e)
        {
            #region Controlli vari sulla TexBox

            if (string.IsNullOrEmpty(txtCodice.Text))
            { //se la TextBox è vuota
                MessageBox.Show("Il campo codice non può essere vuoto", "ATTENZIONE!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtCodice.Focus();
                return;
            }
            if (this.ControlloLunghezza(txtCodice))
            {
                MessageBox.Show("Il codice delle tessera non può avere dei caratteri minori di 12",
                    "ATTENZIONE!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtCodice.Focus();
                return;
            }

            #endregion Controlli vari sulla TexBox

            #region Inserimento nell'Oggetto

            tessera.Codice = txtCodice.Text.Trim();
            if (radioAbilitata.Checked)
            {
                tessera.Abilitata = true;
            }
            else
            {
                tessera.Abilitata = false;
            }

            #endregion Inserimento nell'Oggetto

            ctrlTessera ctrlTessera = new ctrlTessera();

            #region Inserimento o Modifica nel DataBase

            if (status == StatoForm.Nuovo) // Se Nuovo
            {
                if (ControlloEsistenza(tessera)) // Se la tessera esiste ...
                {
                    MessageBox.Show("Esiste già una Tessera con lo stesso Codice",
                         "ATTENZIONE!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtCodice.Focus();
                    return;
                }
                ctrlTessera.AggiungiTessera(tessera);
                new ctrlMovimentiTessere().RegistraMovimento(tessera, "Creata");
            }
            else // Altrimenti modifica
            {
                if (ControlloEsistenzaModifica(tessera)) // Se la tessera esiste ...
                {
                    MessageBox.Show("Esiste già una Tessera con lo stesso Codice",
                         "ATTENZIONE!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                ctrlTessera.UpdateTessera(tessera);
                new ctrlMovimentiTessere().RegistraMovimento(tessera, "Modificata");
            }

            #endregion Inserimento o Modifica nel DataBase

            if (elenco != null)
                elenco.AggiornaGridDaEsterni(tessera);
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
            this.Close();
        }

        #endregion Eventi

        #region metodi vari

        private void SettaStato(StatoForm stato)
        {
            switch (stato)
            {
                case StatoForm.Nuovo:
                    if (tessera == null)
                    {
                        tessera = new Tessera();
                        txtCodice.Clear();
                    }
                    else
                    {
                        txtCodice.Text = tessera.Codice;
                    }
                    this.Text += " - Nuovo";
                    break;
                case StatoForm.Modifica:
                    txtCodice.Text = tessera.Codice;
                    this.Text += " - Modifica";
                    this.txtCodice.Text = tessera.Codice;
                    if (tessera.Abilitata)
                    {
                        radioAbilitata.Checked = true;
                        radioDisabilitata.Checked = false;
                    }
                    else
                    {
                        radioAbilitata.Checked = false;
                        radioDisabilitata.Checked = true;
                    }
                    break;
                case StatoForm.Lettura:
                    txtCodice.Text = tessera.Codice;
                    this.Text += " - Visualizzazione";
                    btnSalva.Enabled = false;
                    break;
            }
        }

        private bool ControlloLunghezza(TextBox textBox)
        {
            if (textBox.TextLength < 12)
                return true;
            return false;
        }

        private bool ControlloEsistenza(Tessera tessera)
        {
            ctrlTessera ctrl = new ctrlTessera();
            List<Tessera> tessere = ctrl.SelectAll();
            foreach (Tessera t in tessere)
            {
                if (t.Codice == tessera.Codice)
                    return true;
            }
            return false;
        }

        private bool ControlloEsistenzaModifica(Tessera tessera)
        {
            ctrlTessera ctrl = new ctrlTessera();
            List<Tessera> tessere = ctrl.SelectAll();
            foreach (Tessera t in tessere)
            {
                if (t.Id != tessera.Id && t.Codice == tessera.Codice)
                    return true;
            }
            return false;
        }

        #endregion metodi vari

        private void btnAnnulla_Click(object sender, System.EventArgs e)
        {
            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.Close();
        }
    }
}